package com.elitesland.system.service;

import com.elitesland.core.base.PagingVO;
import com.elitesland.system.entity.SysUdcDO;
import com.elitesland.system.param.SysUdcQueryParam;
import com.elitesland.system.vo.SysUdcComboVO;

import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * <pre>
 * [功能说明]
 * </pre>
 *
 * @author Mir
 * @date 2020/6/25
 */
public interface SysUdcService {

    /**
     * 检索分类码
     *
     * @param param 分类查询、分页和排序对象
     * @return 分页结果集
     */
    PagingVO<SysUdcDO> search(SysUdcQueryParam param);

    /**
     * 根据关键字段，返回对应的分类码
     *
     * @param domainCode 领域码
     * @param udcCode    分类码
     * @param udcVal     分类码值
     * @return 分类码对象
     */
    Optional<SysUdcDO> findOne(String domainCode, String udcCode, String udcVal);


    /**
     * 根据关键字段，返回对应的分类码
     *
     *  @param domain 领域码
     *  @param udc    分类码
     *  @param valDesc
     * @return 分类码的值和值描述
     */
    List<SysUdcComboVO> listCodeCombosValLike(String domain, String udc, String valDesc);

    /**
     * 根据关键字段，返回对应的分类码
     * 模糊查询itemGroup1 的值和code
     * 蒙华
     *  @param domain 领域码
     *  @param udcCode
     *  @param udc 以udc参数开头的
     * @return 模糊查询
     */
    List<SysUdcComboVO> listSubCodeLike(String domain,String udcCode, String udc);

    /**
     * 根据关键字段，返回对应的分类码
     *我模糊查询itemGroup1 的值和code
     * 蒙华
     *  @param domain 领域码
     *  @param
     * @return 模糊查询
     */
    List<SysUdcComboVO> listCodeLike(String domain,String udcCode, String udc);

    /**
     * 根据ID返回对应记录
     * @param id 记录ID
     * @return 记录对象
     */
    Optional<SysUdcDO> findOneById(Long id);

    /**
     * 创建分类码
     *
     * @param code 分类码对象
     */
    void createCode(SysUdcDO code);

    /**
     * 更新分类码
     *
     * @param code 分类码对象
     */
    void updateCode(SysUdcDO code);

    /**
     * 获取用于下来选择的分类码
     *
     * @param domain 领域码
     * @param udc    分类码
     * @return 分类码的值和值描述
     */
    List<SysUdcComboVO> listCodeCombos(String domain, String udc);

    /**
     * 获取分类码的Map对应列表
     *
     * @param domain 领域码
     * @param udc    分类码
     * @return 分类码的值和描述
     */
    Map<String, String> getCodeMap(String domain, String udc);

     /** 根据关键字段，返回对应的分类码
     *我模糊查询itemGroup1 的值和code
     * 蒙华
     *  @param domain 领域码
     *  @param
     * @return 模糊查询
     */
    List<SysUdcComboVO> findByUdcValues( List<String> udc);

}
